package cn.com.bod.fas.common.utils;

import cn.com.bod.fas.common.constant.enumconst.ResultCodeEnum;
import cn.com.bod.fas.common.service.FeignErrorMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cn.com.yusys.yusp.commons.exception.Message;
import cn.com.yusys.yusp.commons.web.rest.dto.ResultDto;

/**
 * @description 响应报文工具类（所有响应报文通过该工具类定义）
 * @author chenyuanxian
 * @date 2019年9月15日 下午7:27:42
 * @version 1.0.0
 * @Copyright (c) scfhdt
 */

@Component
public class ResultUtil {
	
    
    @Autowired
    FeignErrorMessageService feignErrorMessageService;
    
    /**
     * @description 返回包含数据内容的成功报文.
     * @author chenyuanxian
     * @date 2019年9月17日 下午11:39:58
     * @param t 具体数据内容
     * @return 包含数据内容的成功报文
     */
    public <T> ResultDto<T> success(T t) {
        ResultDto<T> result = new ResultDto<T>(t);
        Message message = feignErrorMessageService.getMessage(Integer.toString(ResultCodeEnum.SUCCESS.getCode()));
        result.setCode(ResultCodeEnum.SUCCESS.getCode());
        result.setMessage(message.getMessage());

        return result;
    }
    
    /**
     * @description 返回不包含数据内容的成功报文.
     * @author chenyuanxian
     * @date 2019年9月17日 下午11:42:18
     * @return 不包含数据内容的成功报文.
     */
    public <T> ResultDto<T> success() {
        return success(null);
    }
    
    /**
     * @description 返回不包含数据内容的自定义错误报文.
     * @author chenyuanxian
     * @date 2019年9月17日 下午11:43:46
     * @param code 错误码
     * @param msg 错误消息
     * @return  不包含数据内容的自定义错误报文
     */
    public <T> ResultDto<T> error(ResultCodeEnum resultCodeEnum) {
        ResultDto<T> result = new ResultDto<T>();
        Message message = feignErrorMessageService.getMessage(Integer.toString(resultCodeEnum.getCode()));
        result.setCode(resultCodeEnum.getCode());
        result.setMessage(message.getMessage());
        result.setData(null);
        return result;
    }
    
    /**
     * @description 返回不包含数据内容的默认错误报文.
     * @author chenyuanxian
     * @date 2019年9月17日 下午11:44:43
     * @param msg 错误码
     * @return 不包含数据内容的默认错误报文
     */
//    public static <T> ResultDto<T> error(String msg) {
//        ResultDto<T> result = new ResultDto<T>();
//        result.setCode(ResultCodeEnum.ERROR.getCode());
//        result.setMessage(msg);
//        result.setData(null);
//        return result;
//    }
    
    /**
     * @description 返回参数错误报文.
     * @author chenyuanxian
     * @date 2019年9月17日 下午11:51:10
     * @param msg 错误消息
     * @return 参数错误报文
     */
    public <T> ResultDto<T> paramError(String msg) {
        ResultDto<T> result = new ResultDto<T>();
        result.setCode(ResultCodeEnum.PARAM_VALIDATION_ERROR.getCode());
        result.setMessage(msg);
        result.setData(null);
        
        return result;
    }

}
